package com.xujie.sportsmeeting.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;

import jakarta.validation.constraints.NotBlank;
import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 比赛项目实体
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("competition_event")
public class CompetitionEvent implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 项目ID
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 项目名称
     */
    @NotBlank(message = "项目名称不能为空")
    @TableField("event_name")
    private String eventName;

    /**
     * 项目编码
     */
    @NotBlank(message = "项目编码不能为空")
    @TableField("event_code")
    private String eventCode;

    /**
     * 项目类型 1-个人项目 2-团体项目
     */
    @TableField("event_type")
    private Integer eventType;

    /**
     * 性别限制 0-不限 1-男子 2-女子
     */
    @TableField("gender_limit")
    private Integer genderLimit;

    /**
     * 年龄分组
     */
    @TableField("age_group")
    private String ageGroup;

    /**
     * 最大参赛人数
     */
    @TableField("max_participants")
    private Integer maxParticipants;

    /**
     * 项目描述
     */
    @TableField("description")
    private String description;

    /**
     * 比赛规则
     */
    @TableField("rules")
    private String rules;

    /**
     * 计分方式
     */
    @TableField("scoring_method")
    private String scoringMethod;

    /**
     * 成绩单位
     */
    @TableField("unit")
    private String unit;

    /**
     * 比赛地点
     */
    @TableField("venue")
    private String venue;

    /**
     * 比赛时间
     */
    @TableField("competition_time")
    private LocalDateTime competitionTime;

    /**
     * 比赛时长(分钟)
     */
    @TableField("duration_minutes")
    private Integer durationMinutes;

    /**
     * 报名开始时间
     */
    @TableField("registration_start_time")
    private LocalDateTime registrationStartTime;

    /**
     * 报名结束时间
     */
    @TableField("registration_end_time")
    private LocalDateTime registrationEndTime;

    /**
     * 状态 0-禁用 1-正常 2-报名中 3-比赛中 4-已结束
     */
    @TableField("status")
    private Integer status;

    /**
     * 创建时间
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
